#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Git仓库迁移工具打包脚本
用于生成Windows可执行文件
"""

import os
import sys
import subprocess
import shutil
from pathlib import Path


def check_pyinstaller():
    """检查PyInstaller是否已安装"""
    try:
        import PyInstaller
        print(f"PyInstaller版本: {PyInstaller.__version__}")
        return True
    except ImportError:
        print("PyInstaller未安装，正在安装...")
        try:
            subprocess.run([sys.executable, "-m", "pip", "install", "pyinstaller"], check=True)
            print("PyInstaller安装成功")
            return True
        except subprocess.CalledProcessError:
            print("PyInstaller安装失败")
            return False


def build_exe():
    """构建可执行文件"""
    print("开始构建Git仓库迁移工具...")
    
    # 检查必要文件
    required_files = ["git_migrator.py", "cli.py", "config_template.json"]
    for file in required_files:
        if not os.path.exists(file):
            print(f"错误：缺少必要文件 {file}")
            return False
    
    # 构建命令
    build_cmd = [
        "pyinstaller",
        "--onefile",  # 生成单个exe文件
        "--console",  # 控制台应用
        "--name=GitMigrator",  # 可执行文件名
        f"--add-data={os.path.abspath('config_template.json')};.",  # 包含配置文件模板
        "--distpath=dist",  # 输出目录
        "--workpath=build",  # 工作目录
        "--specpath=build",  # spec文件目录
        "--clean",  # 清理临时文件
        "cli.py"  # 主程序入口
    ]
    
    try:
        print("执行构建命令...")
        result = subprocess.run(build_cmd, check=True, capture_output=True, text=True)
        print("构建成功！")
        return True
    except subprocess.CalledProcessError as e:
        print(f"构建失败: {e}")
        print(f"错误输出: {e.stderr}")
        return False


def create_distribution():
    """创建发布包"""
    print("创建发布包...")
    
    dist_dir = Path("dist")
    if not dist_dir.exists():
        print("错误：dist目录不存在，请先构建项目")
        return False
    
    # 创建发布目录
    release_dir = Path("release")
    if release_dir.exists():
        shutil.rmtree(release_dir)
    release_dir.mkdir()
    
    # 复制可执行文件
    exe_file = dist_dir / "GitMigrator.exe"
    if exe_file.exists():
        shutil.copy2(exe_file, release_dir)
        print(f"已复制可执行文件到 {release_dir}")
    else:
        print("错误：可执行文件不存在")
        return False
    
    # 复制配置文件模板
    config_template = Path("config_template.json")
    if config_template.exists():
        shutil.copy2(config_template, release_dir)
        print("已复制配置文件模板")
    
    # 复制使用说明
    readme_file = Path("README.md")
    if readme_file.exists():
        shutil.copy2(readme_file, release_dir)
        print("已复制使用说明")
    
    # 创建批处理文件
    batch_content = """@echo off
echo Git仓库迁移工具
echo.
echo 使用方法：
echo 1. 双击运行 GitMigrator.exe
echo 2. 或者使用命令行：GitMigrator.exe --help
echo.
pause
"""
    
    with open(release_dir / "运行说明.bat", "w", encoding="gbk") as f:
        f.write(batch_content)
    
    print(f"发布包已创建在 {release_dir} 目录")
    return True


def main():
    """主函数"""
    print("=== Git仓库迁移工具打包脚本 ===\n")
    
    # 检查PyInstaller
    if not check_pyinstaller():
        print("无法继续，请手动安装PyInstaller")
        return
    
    # 构建exe
    if not build_exe():
        print("构建失败，请检查错误信息")
        return
    
    # 创建发布包
    if not create_distribution():
        print("创建发布包失败")
        return
    
    print("\n🎉 打包完成！")
    print("可执行文件位置: dist/GitMigrator.exe")
    print("发布包位置: release/")
    print("\n使用说明：")
    print("1. 将release目录中的所有文件复制到目标机器")
    print("2. 双击运行GitMigrator.exe")
    print("3. 按照提示配置和运行迁移")


if __name__ == "__main__":
    main()

